package com.lancoo.cvas.arrangecourse.clashesprocess;

import com.lancoo.cvas.arrangecourse.common.BinaryUtil;
import com.lancoo.cvas.arrangecourse.entities.ClassHour;

/**
 * @Description 处理上课单元之间的冲突
 * @Author Fortysun
 * @Date 2023-03-30 19:38
 */
public class ClashesRecordCompute {
    /**
     * 检测是否周次冲突
     * 判断的标准是，两个周次的二进制字符串，进行与操作
     * 如果结果中存在1，说明存在冲突
     * @param classWeek1 教学班安排的周次
     * @param classWeek2 教室课时分组中，可分配的周次
     * @return
     */
    protected boolean isWeekClash(String classWeek1, String classWeek2) {
        //如果二进制与之后的结果，等于0，说明结果中没有1，所以不存在周次冲突的问题
        if (0 == BinaryUtil.binaryAndInt(classWeek1, classWeek2)) {

            return false;
        }

        return true;
    }

    /**
     * 如果课程单元的教室、教师、学生冲突都已经判断过了，那么直接跳出循环，不用再比较
     * @param classHourA
     * @return
     */
    protected boolean isBreak(ClassHour classHourA) {
        //如果这个课时，以及设置过了教室冲突、教师冲突以及学生冲突，那么跳过这个课时的比较
        //减少计算量，提高效率
        if (classHourA.isRoomClash()
                && classHourA.isStudentClash()
                && classHourA.isTeacherClash()) {
            return true;
        }
        return false;
    }
}
